Touchscreen met gsm shield gebruiken

algemene C code
Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Touchscreen met gsm shield gebruiken

Berichtdoor christiaan » 20 Mei 2016, 18:12

dus komt het erop neer dat ik het aantal 20 moet verlagen naar (+31600000000) 13 (12 digits + 1 extra)

en dan komt het goed?

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Touchscreen met gsm shield gebruiken

Berichtdoor nicoverduin » 20 Mei 2016, 18:15

Nee gewoon 21 van maken in de definities. Gaat het altijd goed. Google eens op "C zero terminated char array"..
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Touchscreen met gsm shield gebruiken

Berichtdoor christiaan » 20 Mei 2016, 21:42

En voor het aanroepen van senderNumber. Kan ik dat nu gewoon doen en gaat het dan altijd goed, of moet ik nog iets aanpassen in mijn sketch?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Touchscreen met gsm shield gebruiken

Berichtdoor nicoverduin » 20 Mei 2016, 21:58

Volgens mij kun je altijd die sender nummer functie aanroepen. Maar dan zul je energie moeten steken in de functies van die library. Dan weet je wat je wel en niet kan. Beetje als de handleiding van de televisie die we ook nooit lezen....... En als je twijfelt kun je altijd testprogramma's maken om een specifieke functie uit te testen. Zo leer je wat een library kan. Ik weet het... het is geen grote stappen snel thuis oplossing.... maar ja ik noem dat investeren in jezelf........
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Touchscreen met gsm shield gebruiken

Berichtdoor christiaan » 21 Mei 2016, 18:21

Ben bezig met test programma's, echter gebruik ik gelijk daarvoor de orignele code zodat ik het gelijk werkend krijg. Echter zit ik al 2 dagen tegen een klein probleempje / foutje aan, waarvan ik de oplossing zo niet kan vinden.

Als volgt:
Ik heb een schakelaar, pushbutton idee, geconnected tussen de +5v en digital pin 5. Deze is bedoeld om het inkomende bericht handmatig te verwijderen. Echter zodra het smsje binnenkomt, gaat of voor 5 seconden het berichtje knipperend in beeld, en daarna verwijdert hij hem automatisch of hij wordt gelijk verwijderd. Ziet iemand het foutje?

cpp code
/*
SMS receiver

This sketch, for the Arduino GSM shield, waits for a SMS message
and displays it through the Serial port.

Circuit:
* GSM shield attached to and Arduino
* SIM card that can receive SMS messages

created 25 Feb 2012
by Javier Zorzano / TD

This example is in the public domain.

http://www.arduino.cc/en/Tutorial/GSMExamplesReceiveSMS

*/

/* LCD Screen */
#include <TFT.h> // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs 10 // 10
#define dc 9 // 9
#define rst 8 // 8
TFT TFTscreen = TFT(cs, dc, rst);

const int buttonPin = 5; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status


// include the GSM library
#include <GSM.h>

// PIN Number for the SIM
#define PINNUMBER "0000"

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

// Array to hold the number a SMS is retreived from
char senderNumber[21];
String smsSender;

char message[7];
int x;

void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
TFTscreen.begin();
pinMode(buttonPin, INPUT);
// clear the screen with a black background
TFTscreen.background(0, 0, 0);

// write the static text to the screen
// set the font color to white
TFTscreen.stroke(255, 255, 255);
// set the font size
TFTscreen.setTextSize(3);
// write the text to the top left corner of the screen
TFTscreen.text("Havik", 0, 0);
TFTscreen.text("Scouts", 15, 40);
TFTscreen.text("SMS bom!", 0, 80);

while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

Serial.println("SMS Messages Receiver");

// connection state
boolean notConnected = true;

// Start GSM connection
while (notConnected) {
if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
notConnected = false;
} else {
Serial.println("Not connected");
delay(1000);
}
}

Serial.println("GSM initialized");
Serial.println("Waiting for messages");
clearTftScreen();
}

void loop() {
char c;

// If there are any SMSs available()
if (sms.available()) {
Serial.println("Message received from:");

// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);

if(strcmp(senderNumber, "+31647261678") == 0) {
Serial.println("Message received from: Christiaan de Kleine");
} else {
Serial.println("Message received from: a random person!");
}

// An example of message disposal
// Any messages starting with # should be discarded
if (sms.peek() == '#') {
Serial.println("Discarded SMS");
sms.flush();
}

// Read message bytes and print them
uint8_t i = 0;
while (c = sms.read()) {
//Serial.print(c);
message[i] = c; // build the message from the sms.read() function
message[i+1] = '\0';
i++;
//Serial.println(message);
}

TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(1);
delay(500);
TFTscreen.text(message, 0, 0);
//delay(5000);



// // Read message bytes and print them
// while (c = sms.read()) {
// Serial.print(c);
// TFTscreen.setTextSize(2);
// TFTscreen.text(c, 0, 0);
// }

buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
if (buttonState == HIGH) {
// turn LED off:
// Delete message from modem memory
sms.flush();
Serial.println("MESSAGE DELETED");
TFTscreen.text("Message deleted", 0, 100);
delay(2000);
clearTftScreen();
}
Serial.println("\nEND OF MESSAGE");

}


}

void clearTftScreen() {
TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(2);
TFTscreen.text("Waiting for", 0, 0);
TFTscreen.text("messages...", 0, 40);
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Touchscreen met gsm shield gebruiken

Berichtdoor nicoverduin » 21 Mei 2016, 20:59

Als ik jou begrijp heb je de data pin van de button aan de Vcc hangen (=HIGH). Dan klopt het......Bij een button moet er altijd een weerstand aanwezig zijn. Daar hoor ik je niet over. Dus als die button "zweeft"..Zou dat zomaar geinterpreteerd kunnen worden als High. als jij de button tussen de VCC en datapin hebt, moet je tevens een weerstand van 10K direct van de data pin naar GND zetten. Dan blijft de pin LOW totdat je de button indrukt. Zie tevens de tutorial in jouw IDE over buttons of digitalPin.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Touchscreen met gsm shield gebruiken

Berichtdoor christiaan » 21 Mei 2016, 21:46

Klopt, had ook al de 10k weerstand tussen de datapin en gnd.

Echter knippert ieder binnenkomend smsje nog steeds. De schakelaar werkt momenteel zoals behoren...

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Touchscreen met gsm shield gebruiken

Berichtdoor nicoverduin » 21 Mei 2016, 23:38

Zo maar ff een vraag: Wordt alle voeding vanaf de Arduino afgenomen? Dat zou een overbelasting kunnen zijn. Maar als de voeding inklapt zou de UNO kunnen resetten of die SMS module?
Eventueel kun je dat uitsluiten door ff een LED op een vrije pin aan te zetten en dan een seconde wachten en weer uit te zetten. Als hij na een bericht knippert zou dat betekenen dat hij reset.
Aan je code kan ik zo niet iets verkeerd zien.
Overigens zou ik dit stukje code:
cpp code
TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(1);
delay(500);
TFTscreen.text(message, 0, 0);
//delay(5000);

In de setup opnemen. Morgelijk gebeurt daar meer dan je wilt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Touchscreen met gsm shield gebruiken

Berichtdoor christiaan » 22 Mei 2016, 13:48

Ik zal jou 2 tips nog erin verwerken om te testen of het beter gaat. Echter heb ik nog een raar dingetje:

Met onderstaande code, zorg ik ervoor dat ik mijn inkomend bericht split op 3 regels van 25 tekens. Echter geeft hij alleen regel 1 en 3 weer. Waar zit het foutje dat ik zo niet zie???

cpp code
String randomString = message;
String firstTen = randomString.substring(0,25);
String secondTen = randomString.substring(25,50);
String thirdTen = randomString.substring(50,75);
firstTen.toCharArray(charArrayLine1, 26);
secondTen.toCharArray(charArrayLine2, 26);
thirdTen.toCharArray(charArrayLine3, 26);
TFTscreen.text(charArrayLine1, 0, 40);
TFTscreen.text(charArrayLine2, 0, 50);
TFTscreen.text(charArrayLine3, 0, 60);


Als het wat omslachtig is hoe ik het doe, hoor ik het graag hoe het beter kan.Het vervelende is dat het tftscherm geen String input kan lezen, dus vandaar dat ik het terug zet naar een char array.

In de serial geeft hij ook niet de secondTen weer...

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Touchscreen met gsm shield gebruiken

Berichtdoor nicoverduin » 22 Mei 2016, 18:31

Dat is gelijk een goede reden om String helemaal af te leren. De Arduino kent geen zgn. Garbage Collection waardoor je op enig moment vanzelf door je RAM geheugen bent en er variabelen overschreven worden. String is prima onder de grote besturingssystemen (Linux, Mac, Windows) maar op op non-OS systemen.
Je kan dan beter met char werken en functies als strncpy() voor substring enz. Houd wel rekening dat er geen termination zero achter de char string komt waardoor je er nog een '\0' erbij komt. Dus ook bij de lengte.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten