BASIC4MCU | 질문게시판 | atoi 형변환 질문드립니다.
페이지 정보
작성자 Board 작성일2019-04-13 02:48 조회5,314회 댓글1건본문
atmega128과 esp8266을 시리얼통신 하고있습니다.
atmega128의 온도센서의 값을 char 형으로 esp8266에 uart 송신하고있는데
esp8266에서 이 값을 받아서 휴대폰에 전송하는것까진 했는데
이 숫자 값을 가지고 위험상황인지 안전한지 판단하려면 int로 바꿔야할것같아
atoi 함수로 이것 저것 해봤는데 값이 계속 0만 떠서 도움 요청드립니다 ㅜㅜ
아래는 atoi 쓰지않고 char로 보냈을떄의 소스입니다 ㅜㅜ
<esp8266 code >
#define SERIAL_BUFFER 10
#define BLYNK_PRINT Serial
#include <stdlib.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <ESP8266HTTPClient.h>
#include <WiFiUdp.h>
WidgetTerminal terminal(V1);
char auth[] ="1428084af9fc43e38a312d825539a307"; // auto Token
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Xiaomi_A234"; /* 사용할 WiFi의 SSID 입력 */
char pass[] = "c2011306"; /* 사용할 WiFi의 비밀번호 입력 */
float value01;
byte sig[30];
int relayon=0;
char serString[100];
BlynkTimer timer;
void myTimerEvent()
{
if(Serial1.available() > 21) {
if(Serial1.read() == 0x7E) {
for(int i=0; i<23; i++){
sig[i]=Serial1.read();
}
}
int analogReading=sig[20] + sig[21];
value01=analogReading;
if (value01>50 && relayon==0 ) {
setRemoteState(0x5);
relayon=1;
} else if(value01<50 && relayon==1) {
setRemoteState(0x4);
relayon=0;
}
Blynk.virtualWrite(V5, value01);
Blynk.virtualWrite(V6, relayon);
}
}
void setRemoteState(char value)
{
Serial1.write(0x7E); // start byte
Serial1.write((byte)0x0); // high part of length (always zero)
Serial1.write(0x10); // low part of length (
Serial1.write(0x17); // 0x17 is a remote AT command
Serial1.write((byte)0x0); // frame id set to zero for no reply
// ID of recipient, or use 0xFFFF for broadcast
Serial1.write((byte)0x0);
Serial1.write((byte)0x0);
Serial1.write((byte)0x0);
Serial1.write((byte)0x0);
Serial1.write((byte)0x0);
Serial1.write((byte)0x0);
Serial1.write(0xFF);
Serial1.write(0xFF);
Serial1.write(0xFF);
Serial1.write(0xFE);
Serial1.write(0x02);
Serial1.write('D');
Serial1.write('4');
Serial1.write(value);
long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '4' + value;
Serial1.write(0xFF - (sum & 0xFF));
}
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial1.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(D0,INPUT);
timer.setInterval(1000L, myTimerEvent);
}
void loop() {
Blynk.run();
char a=Serial1.read();
Blynk.virtualWrite(V3, a);
delay(1000);
}
댓글 1
조회수 5,314Board님의 댓글
Board 작성일
추가로 esp8266(아두이노 스케치 사용) 에서 atmega128로 D1포트가 LOW 일떄 a라는 문자를 보내고싶은데
셋업에서 pinMode(D1,INPUT); 하고나서
if(D1==LOW){
Serial1.print('a');
}
이런식으로 루프문에 추가하면 되는걸까요?